home *** CD-ROM | disk | FTP | other *** search
/ Freelog 117 / FreelogNo117-OctobreNovembre2013.iso / Programmation / jedit / jedit5.1.0install.exe / {app} / macros / Files / Open_Selection_In_Desktop.bsh < prev    next >
Text File  |  2013-07-28  |  4KB  |  107 lines

  1. /*
  2.  * jEdit text editor: a macro that opens in desktop the selected text
  3.  * or the word under caret
  4.  *
  5.  * Copyright (C) 2012 Jarek Czekalski <jarekczek@poczta.onet.pl>
  6.  *
  7.  * This program is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU General Public License
  9.  * as published by the Free Software Foundation; either version 2
  10.  * of the License, or any later version.
  11.  *
  12.  * This program is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  * GNU General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with the jEdit program; if not, write to the Free Software
  19.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20.  */
  21.  
  22. // getNoWordSep function {{{
  23. /**
  24.  * Inverts the list of word break chars to get the list of word
  25.  * separators. Ascii only space is assumed.
  26.  */
  27. String getNoWordSep(String sWordBreakChars)
  28. {
  29.     StringBuilder sb = new StringBuilder();
  30.     for (char c = 33; c <= 126; c++)
  31.     {
  32.         if (!Character.isLetterOrDigit(c)
  33.             && sWordBreakChars.indexOf(c) < 0)
  34.         {
  35.             sb.append(c);
  36.         }
  37.     }
  38.     return sb.toString();
  39. } ///}}}
  40.  
  41. // getSelectedWords function {{{
  42. /**
  43.  * Returns an array of selected words, assuming that user selected
  44.  * words (not whitespaces). If nothing is selected, returns
  45.  * the word under the caret, using custom word break chars.
  46.  */
  47. String[] getSelectedWords()
  48. {
  49.     String sWordBreakChars = "\"\'";
  50.     ArrayList words = new ArrayList();
  51.     Selection[] sels = textArea.getSelection();
  52.     for (Selection sel: sels)
  53.         words.add(textArea.getSelectedText(sel));
  54.     if (words.size() == 0)
  55.     {
  56.         // we need to get the word under caret, as nothing is selected
  57.         // we use the same rules as in TextArea.selectWord
  58.         int nLine = textArea.getCaretLine();
  59.         CharSequence line = buffer.getLineSegment(nLine);
  60.         int nStartPos = textArea.getCaretPosition()
  61.                         - buffer.getLineStartOffset(nLine);
  62.  
  63.         // cannot read any char if at line end, so:
  64.         if (nStartPos == line.length())
  65.             nStartPos--;
  66.  
  67.         // findWordStart/End utilities expect noWordSep, but we have
  68.         /// a list of word separators - so invert it
  69.         String sNoWordSep = getNoWordSep(sWordBreakChars);
  70.  
  71.         int nLeft = TextUtilities.findWordStart(
  72.             line, nStartPos, sNoWordSep);
  73.         int nRight = TextUtilities.findWordEnd(
  74.             line, nStartPos+1, sNoWordSep);
  75.         if (nRight - nLeft < 1)
  76.         {
  77.             // javax.swing.JOptionPane.showMessageDialog(null,
  78.                 // "start: " + nLeft + ", end: " + nRight);
  79.             view.getToolkit().beep();
  80.         }
  81.         else
  82.             words.add(String.valueOf(line.subSequence(nLeft, nRight)));
  83.     }
  84.     return words.toArray(new String[0]);
  85. } //}}}
  86.  
  87. for (String sPath: getSelectedWords())
  88. {
  89.     URI uri;
  90.     String sScheme = null;
  91.     try {
  92.         uri = new URI(sPath);
  93.         sScheme = uri.getScheme();
  94.     }
  95.     catch (URISyntaxException se) {}
  96.  
  97.     // javax.swing.JOptionPane.showMessageDialog(null, "_" + sPath + "_");
  98.     // continue;
  99.  
  100.     if (sScheme != null && sScheme.length() > 0)
  101.         java.awt.Desktop.getDesktop().browse(uri);
  102.     else
  103.         MiscUtilities.openInDesktop(sPath);
  104. }
  105.  
  106. // :tabSize=4:indentSize=4:noTabs=true:folding=explicit:collapseFolds=1:
  107.